Tokenomics and Simulation Report: Antigravity¶

Introduction¶

This report presents the simulation of Dark tokenomics and its various components, including the Journey Phase Manager, Treasury, Jackpot, and Pool modules. The simulation tracks the evolution of the Dark token price, NFT minting, and yield distribution across 33 journeys.

The objective of this report is to provide a comprehensive overview of the system's behavior and key metrics through detailed graphs and data accumulation.

Table of Contents¶

  • Need for project like Antigravity?

  • Introduction of Antigravity

  • Goal of Antigravity and Impact Antigravity will make

  • What is $DARK?

  • Components of Antigravity

  • How FuelCells work?

  • How is yield generated

  • How Jackpot works?

  • How will Evil Address operate?

  • Benefits of Evil Address to holders of $DARK and FuelCells?

  • How is supply crisis created

  • Tokenomics Simulations

    • Simulation Variables

    • Token Distribution over journey

    • Price of Dark Token over journeys

    • Total Number of NFTs minted over journey

    • Total Number of NFTs minted in each Journey

    • Cummulative Yield per NFT minted in Journey 1

    • Cummulative Yield per NFT minted in Journey 1 in USD

    • Expected ROI % for user minting in Journey 1

    • Cummulative yield given to NFTs till Journey 50

    • Change of Balance of Evil Address over journeys

    • Expected Liquidity Pool trades

Need for project like Antigravity?¶

Crypto needs a project that pushes the innovation of NFTs. This us an experiment in capturing and concentrating economic energy through tokenomics and defi.

Introduction of Antigravity¶

Antigravity is the most dynamic story and set of tokenomics folded into a single project.

Goal of Antigravity and Impact Antigravity will make¶

The goal of agproject.io is to create the best community in crypto hands down. We hope to break the 4 year bull and bear cycle.

What is $DARK?¶

'$Dark' is a PRC20 token with a total supply of 1M tokens, no inflation and programmed scarcity. It is also the only token used to mint Fuel Cell NFTs.

Components of Antigravity¶

The 3 components of Antigravity are it's story and art inspired by "Rings of Dust". The $Dark Matter Token, and the Fuel Cell NFT.

How FuelCells work?¶

The Fuel Cell NFT is minted on a 1 to 1 ratio of the $Dark Matter token and has a limit of 1M. Users have 33 chances to mint the Fuel Cell NFTs and a 15 day window to mint each series. The Fuel Cell NFT also has 3 features: the Art from "Rings of Dust", the treasury yield paid every 105 days, and the lottery giveaways that take place in the 90 days following the minting phase.

How is yield generated¶

Yield is generated from the minting of Fuel Cells. 77% of the $Dark Matter tokens that are used in minting fund the treasury. The treasury pays yield every 105 days into the Fuel Cell NFTs. The yeild can only be collected by breaking open the Fuel Cell NFT. Once the Fuel Cell NFT is broken open (unwrapped) it no longer receives yield from the treasury. Unbroken Fuel Cell NFTs receive yield from the treasury every 105 days.

How Jackpot works?¶

20% of the $Dark Mater tokens used in minting go to funding the Jackpot address. When users mint a Fuel Cell NFT they're automatically entered into 3 drawings of the lottery that take place during the following 90 days.

How will Evil Address operate?¶

The Evil Address has an unfair advantage in the Antgravity game. Not only does the Evil Adress receive the majority of $Dark Matter tokens (65%), but it also seeks to mint as many Fuel Cell NFTs as possible. By doing this the Evil Address hopes to hoard as many $Dark Matter tokens from winning lotteries and collecting yield from the treasury.

Benefits of Evil Address to holders of $DARK and FuelCells?¶

The competitive nature of the Evil Address does remove the supply of $Dark Matter from the market. This may increase demand for the tokens.

How is supply crisis created¶

Supply crises my arrise from the Evil Address hoarding tokens and NFTs, minting of the Fuel Cell NFTs, limited minting windows, limited minting time periods, fomo of getting into the next lotteries and an event called "The Rapture" where all unutilized $Dark Matter tokens will be destroyed and removed from supply following the final (33rd) minting phase

Tokenomics Simulations¶

In [ ]:
# Import necessary packages and modules

# General packages
import numpy as np
import random
import sys
import os
project_root = os.path.abspath(os.path.join(os.getcwd(), '..'))
if project_root not in sys.path:
    sys.path.append(project_root)
import plotly.graph_objects as go
import pandas as pd
from plotly.subplots import make_subplots
from constants.constants import exports_dir

# Import custom modules
from modules.Account import Account
from modules.Dark import DarkToken
from modules.FuelCells import FuelCellsToken
from modules.JourneyPhaseManager import JourneyPhaseManager
from modules.Treasury import Treasury
from modules.LaunchControlCenter import LaunchControlCenter
from modules.EvilAddress import EvilAddress
from modules.Jackpot import Jackpot
from modules.Pool import Pool
from modules.Team import Team
from modules.DAIStableCoin import DAIStableCoin
import plotly.io as pio

# This ensures Plotly output works in multiple places:
# plotly_mimetype: VS Code notebook UI
# notebook: "Jupyter: Export to HTML" command in VS Code
# See https://plotly.com/python/renderers/#multiple-renderers
pio.renderers.default = "plotly_mimetype+notebook"

# Set up initial configurations for the simulation
np.random.seed(42)
random.seed(42)

Initialize accounts¶

In [ ]:
# Import necessary packages and modules

# Initialize Accounts

# Public account
public_account = Account()

# MagicBox account managed by the team
magic_box_account = Account()

# Dead account
dead_account = Account()

# Team account to collect share of Dark tokens used to mint NFTs
team_account = Team()

# Initialize Dark token
dark_token = DarkToken()

# Mint initial Dark token supply to Public, MagicBox, and Evil address
initial_dark_supply = 1000000  # Total initial supply
public_initial_balance = int(initial_dark_supply * 0.10)
magic_box_initial_balance = int(initial_dark_supply * 0.25)
evil_address_initial_balance = int(initial_dark_supply * 0.65)

dark_token.mint(public_account, public_initial_balance)
dark_token.mint(magic_box_account, magic_box_initial_balance)

# Initialize FuelCells token
fuel_cells_token = FuelCellsToken()

# Initialize JourneyPhaseManager
journey_phase_manager = JourneyPhaseManager()

# Initialize Treasury
treasury_account = Account()
treasury = Treasury(treasury_account, dark_token)

# Initialize Jackpot
jackpot_account = Account()
jackpot = Jackpot(jackpot_account, dark_token, journey_phase_manager, fuel_cells_token)

# Initialize LaunchControlCenter
lcc = LaunchControlCenter(dark_token, fuel_cells_token, treasury_account, jackpot_account, team_account, journey_phase_manager)

# Initialize EvilAddress
evil_address_account = EvilAddress(dark_token, fuel_cells_token, lcc, journey_phase_manager, evil_address_initial_balance)
dark_token.mint(evil_address_account, evil_address_initial_balance)

# Initialize Pool
dai_token = DAIStableCoin()
pool = Pool(dark_token, dai_token)

# Initialize accounts and variables summary
print("Initial Balances:")
print(f"Public Account: {dark_token.balance_of(public_account)} Dark tokens")
print(f"Treasury Contract Balance: {dark_token.balance_of(treasury_account)} Dark tokens")
print(f"Jackpot Contract Balance: {dark_token.balance_of(jackpot_account)} Dark tokens")
print(f"MagicBox Account: {dark_token.balance_of(magic_box_account)} Dark tokens")
print(f"Evil Address Contract Balance: {dark_token.balance_of(evil_address_account)} Dark tokens")
print(f"Team Account: {dark_token.balance_of(team_account)} Dark tokens")
Initial Balances:
Public Account: 100000 Dark tokens
Treasury Contract Balance: 0 Dark tokens
Jackpot Contract Balance: 0 Dark tokens
MagicBox Account: 250000 Dark tokens
Evil Address Contract Balance: 650000 Dark tokens
Team Account: 0 Dark tokens

Data Storage and Helper Functions¶

In [ ]:
# Initialize data storage
prices = []
volumes = []
nfts_minted = [] # total NFTs minted
nfts_minted_per_journey = [] # NFTS minted in each journey
evil_address_balances = []
yields_per_journey = []
cumulative_yield_per_journey_1 = []
yields_per_journey_accumulated = []
yield_per_nft_per_journey = []
pool_dark_reserves = []
pool_dai_reserves = []
token_distribution = []

# Helper function to accumulate data
def accumulate_data(journey, phase, pool, fuel_cells_token, evil_address_account, treasury, jackpot_account, treasury_account):
    prices.append({
        'journey': journey,
        'phase': phase,
        'price': pool.get_price()
    })
    volumes.append({
        'journey': journey,
        'phase': phase,
        'volume': pool.total_volume
    })
    evil_address_balances.append({
        'journey': journey,
        'phase': phase,
        'balance': dark_token.balance_of(evil_address_account)
    })
    pool_dark_reserves.append({
        'journey': journey,
        'phase': phase,
        'dark_reserve': pool.dark_reserve
    })
    pool_dai_reserves.append({
        'journey': journey,
        'phase': phase,
        'dai_reserve': pool.dai_reserve
    })
    token_distribution.append({
        'journey': journey,
        'phase': phase,
        'public_balance': dark_token.balance_of(public_account),
        'magic_box_balance': dark_token.balance_of(magic_box_account),
        'evil_address_balance': dark_token.balance_of(evil_address_account),
        'team_balance': dark_token.balance_of(team_account),
        'treasury_balance': dark_token.balance_of(treasury_account) - treasury.total_yield_distributed,
        'jackpot_balance': dark_token.balance_of(jackpot_account),
        'pool_balance': pool.dark_reserve,
        'yield_balance': treasury.total_yield_distributed
    })
    if phase == 3 and journey > 0:
        if journey <= 33:
            yield_for_journey = treasury.get_total_yield_for_journey(journey)
            yields_per_journey.append({
                'journey': journey,
                'total_yield': yield_for_journey
            })
            nfts_minted.append({
                "journey": journey,
                "nfts": fuel_cells_token.total_supply
            })
            supplyInPreviousJourney = 0
            if(nfts_minted_per_journey.__len__() != 0):
                supplyInPreviousJourney = nfts_minted[journey-2]["nfts"]

            nfts_minted_per_journey.append({
                "journey": journey,
                "nftsMinted": fuel_cells_token.total_supply - supplyInPreviousJourney
            })

        # Accumulate yield for NFTs minted in journey 1
        cumulative_yield_per_journey_1.append({
            'journey': journey,
            'total_yield': (treasury.get_total_yield_for_journey(1) / journey_phase_manager.get_nft_count(1))
        })

        yield_per_nft_per_journey.append({
            'journey': journey,
            'total_yield': treasury.get_total_yield_for_journey(1)
        })
        # Accumulate yield for NFTs minted in previous journeys
        total_yield_accumulated = treasury.total_yield_distributed
        yields_per_journey_accumulated.append({
            'journey': journey,
            'total_yield': total_yield_accumulated
        })

Initialize Liquidity Pool¶

In [ ]:
# Initialize Liquidity Pool

# Mint initial DAI supply to MagicBox account
initial_dai_supply = 300000  # Total initial DAI supply for liquidity
dai_token.mint(magic_box_account, initial_dai_supply)

# Define liquidity amounts
dark_liquidity_amount = 100000  # Dark tokens from MagicBox balance
dai_liquidity_amount = initial_dai_supply   # DAI tokens

# Add liquidity to the pool from MagicBox
pool.add_liquidity(magic_box_account, dark_liquidity_amount, dai_liquidity_amount)

# Print pool status after adding liquidity
print(f"Liquidity Pool Initialized:")
print(pool)
print(f"Initial DARK token price: {pool.get_price()} per DAI token")
Liquidity Pool Initialized:
Pool: Dark reserve = 100000, DAI reserve = 300000, Fee = 0.003, Total volume = 0
Initial DARK token price: 3.0 per DAI token

Utility Functions¶

In [ ]:
# Utility functions

# Helper function to simulate trades
def simulate_trades(account, pool, total_trades, buy_pressure, sell_pressure, nft_purchase_share_from_public_buy, journey_phase_manager, dai_token):
    for _ in range(total_trades):
        trade_type = np.random.choice(["buy", "sell"], p=[buy_pressure, sell_pressure])
        if trade_type == "buy":
            dai_amount = np.random.randint(10, 100)  # Random DAI amount to buy Dark tokens
            if dai_token.balance_of(account) < dai_amount:
                dai_token.mint(account, dai_amount)  # Mint DAI tokens if account has insufficient balance
            if pool.dai_reserve >= dai_amount:
                pool.buy(account, dai_amount)
                dark_tokens_purchased = dai_amount / pool.get_price()
                if journey_phase_manager.get_current_journey() <=33:
                    nft_purchase_amount = int(dark_tokens_purchased * nft_purchase_share_from_public_buy)
                    if journey_phase_manager.get_current_phase() == 1 and dark_tokens_purchased >= nft_purchase_amount:
                        # print(f"Minting more FUEL_CELLS from ${account.address}. Amount: {nft_purchase_amount}")
                        lcc.mint_nft(account, nft_purchase_amount)
        else:
            dark_amount = np.random.randint(10, 100)  # Random Dark amount to sell for DAI
            if dark_token.balance_of(account) >= dark_amount and pool.dark_reserve >= dark_amount:
                pool.sell(account, dark_amount)

Variables¶

In [ ]:
# Variables for controlling buy/sell pressures and trades

buy_pressure = 0.6  # 60% of the trades will be buys
sell_pressure = 0.4  # 40% of the trades will be sells
total_trades = 10000  # Total number of trades in the journey
nft_purchase_share_from_public_buy = 0.3  # 30% of the Dark tokens from buys will be used for minting NFTs
public_nft_mint_percentage = 0.10  # 10% of the public Dark token balance will be used to mint NFTs
public_re_mint_from_lottery_percentage = 0.10 # 10% of the lottery winnings will be used to mint NFTs again

# Initial pool status
initial_dark_reserve = pool.dark_reserve
initial_dai_reserve = pool.dai_reserve
initial_price = pool.get_price()

print(f"Initial Dark reserve: {initial_dark_reserve}")
print(f"Initial DAI reserve: {initial_dai_reserve}")
print(f"Initial Dark token price: {initial_price}")
print(f"Buy Probability: {buy_pressure}")
print(f"Sell Probability: {sell_pressure}")
print(f"Total Trades per journey: {total_trades}")
print(f"% of the Dark tokens from buys will be used for minting NFTs: {nft_purchase_share_from_public_buy}")
print(f"% of the public Dark token balance will be used to mint NFTs: {public_nft_mint_percentage}")
print(f"% of the lottery winnings will be used to mint NFTs again: {public_re_mint_from_lottery_percentage}")
Initial Dark reserve: 100000
Initial DAI reserve: 300000
Initial Dark token price: 3.0
Buy Probability: 0.6
Sell Probability: 0.4
Total Trades per journey: 10000
% of the Dark tokens from buys will be used for minting NFTs: 0.3
% of the public Dark token balance will be used to mint NFTs: 0.1
% of the lottery winnings will be used to mint NFTs again: 0.1

Run through the journeys¶

In [ ]:
# # Journey 1 Simulation

# # Simulate the minting phase
# public_initial_balance = dark_token.balance_of(public_account)
# public_nft_mint_amount = int(public_initial_balance * public_nft_mint_percentage)  # 10% of the public Dark token balance

# evil_address_nft_mint_amount = int(evil_address_account.starting_balance * evil_address_account.b * (evil_address_account.r ** (journey_phase_manager.get_current_journey() - 1)) / 100)

# # Public mints NFTs
# lcc.mint_nft(public_account, public_nft_mint_amount)

# # Evil address mints NFTs
# evil_address_account.mint_fuel_cells()

# # Update phase to lottery phase
# journey_phase_manager.increment_phase()

# # Capture the jackpot balance before the lottery
# initial_jackpot_balance = dark_token.balance_of(jackpot.account)

# # Conduct the lottery
# lottery_result = jackpot.conduct_lottery()
# print(lottery_result)

# # Total lottery payouts
# total_lottery_payouts = sum(jackpot.calculate_payouts(journey_phase_manager.get_current_journey(), initial_jackpot_balance))
# print(f"Total lottery payouts: {total_lottery_payouts}")

# # Public sells all their lottery winnings
# lottery_winnings = jackpot.get_lottery_winnings(journey_phase_manager.get_current_journey(), public_account)
# if lottery_winnings > 0:
#     pool.sell(public_account, lottery_winnings)

# print(f"Total lottery winnings for public: {lottery_winnings}")

# # Simulate trades in Phase 1
# phase_1_trades = int(total_trades * 0.3)  # 30% of the trades in Phase 1
# simulate_trades(public_account, pool, phase_1_trades, buy_pressure, sell_pressure, nft_purchase_share_from_public_buy, journey_phase_manager, dai_token)
# print(f"Total volume in Pool at end of Phase 1: {pool.total_volume}")

# # Update phase to yield distribution
# journey_phase_manager.increment_phase()

# # Simulate trades in Phase 2
# phase_2_trades = int(total_trades * 0.5)  # 50% of the trades in Phase 2
# simulate_trades(public_account, pool, phase_2_trades, buy_pressure, sell_pressure, nft_purchase_share_from_public_buy, journey_phase_manager, dai_token)
# print(f"Total volume in Pool at end of Phase 2: {pool.total_volume}")

# # Update phase to next journey
# journey_phase_manager.increment_phase()

# # Simulate trades in Phase 3
# phase_3_trades = total_trades - (phase_1_trades + phase_2_trades)  # Remaining trades in Phase 3
# simulate_trades(public_account, pool, phase_3_trades, buy_pressure, sell_pressure, nft_purchase_share_from_public_buy, journey_phase_manager, dai_token)
# print(f"Total volume in Pool at end of Phase 3: {pool.total_volume}")

# # Distribute yield to NFT holders
# treasury.distribute_yield(journey_phase_manager)

# # Calculate the total yield given by the treasury
# total_yield_given = treasury.total_yield_distributed
# print(f"Total yield given by the treasury in Journey 1: {total_yield_given}")

# # Calculate the yield per NFT for public and evil address
# public_nft_count = fuel_cells_token.balance_of(public_account)
# evil_nft_count = fuel_cells_token.balance_of(evil_address_account)
# total_nft_count = public_nft_count + evil_nft_count

# yield_per_nft = total_yield_given / total_nft_count if total_nft_count else 0
# print(f"Total yield per NFT: {yield_per_nft}")

# # Final pool status
# final_dark_reserve = pool.dark_reserve
# final_dai_reserve = pool.dai_reserve
# final_price = pool.get_price()

# print(f"Final Dark reserve: {final_dark_reserve}")
# print(f"Final DAI reserve: {final_dai_reserve}")
# print(f"Final Dark token price: {final_price}")

# # Print summary of Journey 1
# print("Journey 1 Summary:")
# print(f"Public Account: {fuel_cells_token.balance_of(public_account)} FuelCells NFTs")
# print(f"Evil Address Account: {fuel_cells_token.balance_of(evil_address_account)} FuelCells NFTs")
# print(f"Treasury Balance: {dark_token.balance_of(treasury_account)} Dark tokens")
# print(f"Jackpot Balance: {dark_token.balance_of(jackpot_account)} Dark tokens")
# print(f"Pool: {pool}")
# print(f"Total trades: {total_trades}")
# print(f"Buy pressure: {buy_pressure * 100}%")
# print(f"Sell pressure: {sell_pressure * 100}%")
# print(f"Total lottery winnings per winner: {lottery_winnings / total_trades if total_trades else 0}")
# print(f"Total volume in Pool: {pool.total_volume}")

# # Move to next journey
# journey_phase_manager.increment_phase()

Simualte for 50 journeys¶

In [ ]:
# Simulate 33 Journeys with data accumulation

accumulate_data(0, 1, pool, fuel_cells_token, evil_address_account, treasury, jackpot_account, treasury_account)
accumulate_data(0, 2, pool, fuel_cells_token, evil_address_account, treasury, jackpot_account, treasury_account)
accumulate_data(0, 3, pool, fuel_cells_token, evil_address_account, treasury, jackpot_account, treasury_account)

evilPercentages = []
totalNftsMintedValue = 0
nftsMintedInEachJourneyValue = 0
totalNFTsMinted = []
nftsMintedInEachJourney = []
treasuryBalance = []

for journey in range(1, 51):
    if journey<=33:
        print()
        print(f"Simulating Journey {journey}")

        # Phase 1: Minting Phase
        public_initial_balance = dark_token.balance_of(public_account)
        public_nft_mint_amount = int(public_initial_balance * public_nft_mint_percentage)  # 10% of the public Dark token balance

        # Public mints NFTs
        lcc.mint_nft(public_account, public_nft_mint_amount)
        print(f"Public mints NFTs using: {public_nft_mint_amount} in journey {journey}, fuel cells balance: {fuel_cells_token.balance_of(public_account)}")

        # Evil address mints NFTs
        evil_address_account.mint_fuel_cells()

        # Simulate trades in Phase 1
        phase_1_trades = int(total_trades * 0.3)  # 30% of the trades in Phase 1
        simulate_trades(public_account, pool, phase_1_trades, buy_pressure, sell_pressure, nft_purchase_share_from_public_buy, journey_phase_manager, dai_token)
        print(f"Total volume in Pool at end of Phase 1: {pool.total_volume}")

        # Accumulate data at the end of Phase 1
        accumulate_data(journey, 1, pool, fuel_cells_token, evil_address_account, treasury, jackpot_account, treasury_account)
        totalNftsMintedValue += fuel_cells_token.total_supply
        nftsMintedInEachJourneyValue = fuel_cells_token.total_supply - nftsMintedInEachJourneyValue
        totalNFTsMinted.append(totalNftsMintedValue)
        nftsMintedInEachJourney.append(nftsMintedInEachJourneyValue)
        # Increment to Phase 2
        journey_phase_manager.increment_phase()

        # Phase 2: Lottery Phase
        # Capture the jackpot balance before the lottery
        initial_jackpot_balance = dark_token.balance_of(jackpot.account)

        # Conduct the lottery
        lottery_result = jackpot.conduct_lottery()
        print(lottery_result)

        evil_address_jackpot_winning = jackpot.get_lottery_winnings(journey, evil_address_account)
        print(f"Evil Address lottery winning: {evil_address_jackpot_winning}")

        # Total lottery payouts
        total_lottery_payouts = sum(jackpot.calculate_payouts(journey_phase_manager.get_current_journey(), initial_jackpot_balance))
        # print(f"Total lottery payouts: {total_lottery_payouts}")

        # Public sells all their lottery winnings
        lottery_winnings = jackpot.get_lottery_winnings(journey_phase_manager.get_current_journey(), public_account)
        # 10% of the lottery winnings by public will be used to mint NFTs again in next journey
        tokens_to_be_sold = lottery_winnings * (1 - public_re_mint_from_lottery_percentage)
        if tokens_to_be_sold > 0:
            pool.sell(public_account, tokens_to_be_sold)

        print(f"Total lottery winnings for public: {lottery_winnings}")
        print(f"Total lottery winnings sold by public: {tokens_to_be_sold}")

        # Simulate trades in Phase 2
        phase_2_trades = int(total_trades * 0.5)  # 50% of the trades in Phase 2
        simulate_trades(public_account, pool, phase_2_trades, buy_pressure, sell_pressure, nft_purchase_share_from_public_buy, journey_phase_manager, dai_token)
        # print(f"Total volume in Pool at end of Phase 2: {pool.total_volume}")

        # Accumulate data at the end of Phase 2
        accumulate_data(journey, 2, pool, fuel_cells_token, evil_address_account, treasury, jackpot_account, treasury_account)

        # Increment to Phase 3
        journey_phase_manager.increment_phase()

        # transfer 3% to the team from recent evil address win
        team_tax_from_ea = evil_address_jackpot_winning * 0.03
        dark_token.transfer(evil_address_account, team_account, team_tax_from_ea)

        # transfer remaning winning to jackpot
        dark_token.transfer(evil_address_account, jackpot_account, evil_address_jackpot_winning - team_tax_from_ea)


        # Phase 3: Yield Distribution Phase
        # Simulate trades in Phase 3
        phase_3_trades = total_trades - (phase_1_trades + phase_2_trades)  # Remaining trades in Phase 3
        simulate_trades(public_account, pool, phase_3_trades, buy_pressure, sell_pressure, nft_purchase_share_from_public_buy, journey_phase_manager, dai_token)
        # print(f"Total volume in Pool at end of Phase 3: {pool.total_volume}")

        # Distribute yield to NFT holders
        treasury.distribute_yield(journey_phase_manager)

        # Accumulate data at the end of Phase 3
        accumulate_data(journey, 3, pool, fuel_cells_token, evil_address_account, treasury, jackpot_account, treasury_account)

        # Increment to next journey (Phase 1 of the new journey)
        if journey == 33:
            dark_token.transfer(public_account, dead_account, dark_token.balance_of(public_account))
        journey_phase_manager.increment_phase()
    else:
        # Distribute yield to NFT holders
        treasury.distribute_yield(journey_phase_manager)
        # print(f"Simulating Journey {journey}")

        # Phase 1: Minting Phase
        public_initial_balance = dark_token.balance_of(public_account)
        public_nft_mint_amount = int(public_initial_balance * public_nft_mint_percentage)  # 10% of the public Dark token balance

        # Simulate trades in Phase 1
        phase_1_trades = int(total_trades * 0.3)  # 30% of the trades in Phase 1
        simulate_trades(public_account, pool, phase_1_trades, buy_pressure, sell_pressure, nft_purchase_share_from_public_buy, journey_phase_manager, dai_token)
        # print(f"Total volume in Pool at end of Phase 1: {pool.total_volume}")

        # Accumulate data at the end of Phase 1
        accumulate_data(journey, 1, pool, fuel_cells_token, evil_address_account, treasury, jackpot_account, treasury_account)
        totalNftsMintedValue += fuel_cells_token.total_supply
        nftsMintedInEachJourneyValue = fuel_cells_token.total_supply - nftsMintedInEachJourneyValue
        totalNFTsMinted.append(totalNftsMintedValue)
        nftsMintedInEachJourney.append(nftsMintedInEachJourneyValue)
        # Increment to Phase 2
        journey_phase_manager.increment_phase()

        # Simulate trades in Phase 2
        phase_2_trades = int(total_trades * 0.5)  # 50% of the trades in Phase 2
        simulate_trades(public_account, pool, phase_2_trades, buy_pressure, sell_pressure, nft_purchase_share_from_public_buy, journey_phase_manager, dai_token)
        # print(f"Total volume in Pool at end of Phase 2: {pool.total_volume}")

        # Accumulate data at the end of Phase 2
        accumulate_data(journey, 2, pool, fuel_cells_token, evil_address_account, treasury, jackpot_account, treasury_account)

        # Increment to Phase 3
        journey_phase_manager.increment_phase()

        # Phase 3: Yield Distribution Phase
        # Simulate trades in Phase 3
        phase_3_trades = total_trades - (phase_1_trades + phase_2_trades)  # Remaining trades in Phase 3
        simulate_trades(public_account, pool, phase_3_trades, buy_pressure, sell_pressure, nft_purchase_share_from_public_buy, journey_phase_manager, dai_token)
        # print(f"Total volume in Pool at end of Phase 3: {pool.total_volume}")

        # Distribute yield to NFT holders
        treasury.distribute_yield(journey_phase_manager)

        # Accumulate data at the end of Phase 3
        accumulate_data(journey, 3, pool, fuel_cells_token, evil_address_account, treasury, jackpot_account, treasury_account)
        journey_phase_manager.increment_phase()
    treasuryBalance.append({
        'journey': journey,
        'balance': treasury.remaining_balance,
        'actualBalance': dark_token.balance_of(treasury_account)
    })

# totalNFTsMinted_df = pd.DataFrame(totalNFTsMinted)
# print(totalNFTsMinted_df)

# nftsMintedInEachJourney_df = pd.DataFrame(nftsMintedInEachJourney)
# print(nftsMintedInEachJourney_df)
Simulating Journey 1
Public mints NFTs using: 10000 in journey 1, fuel cells balance: 10000
Evil address mints NFTs using: 67038.0 in journey 1
Total volume in Pool at end of Phase 1: 247484.0139482396
3 Lottery conducted and 121.00413850000004 payouts distributed to total 4419 winners.
Evil Address lottery winning: 91.97065594263836
Total lottery winnings for public: 29.03348255736558
Total lottery winnings sold by public: 26.130134301629024

Simulating Journey 2
Public mints NFTs using: 3783 in journey 2, fuel cells balance: 25166
Evil address mints NFTs using: 60334.0 in journey 2
Total volume in Pool at end of Phase 1: 929428.9480268111
3 Lottery conducted and 234.3967306191957 payouts distributed to total 4149 winners.
Evil Address lottery winning: 173.89085004721548
Total lottery winnings for public: 60.505880571984285
Total lottery winnings sold by public: 54.45529251478586

Simulating Journey 3
Public mints NFTs using: 1346 in journey 3, fuel cells balance: 45413
Evil address mints NFTs using: 54301.0 in journey 3
Total volume in Pool at end of Phase 1: 1562610.9811098159

Simulating Journey 3
Public mints NFTs using: 1346 in journey 3, fuel cells balance: 45413
Evil address mints NFTs using: 54301.0 in journey 3
Total volume in Pool at end of Phase 1: 1562610.9811098159
3 Lottery conducted and 334.930007187133 payouts distributed to total 3687 winners.
Evil Address lottery winning: 249.3190475446183
Total lottery winnings for public: 85.61095964250929
Total lottery winnings sold by public: 77.04986367825836

Simulating Journey 4
Public mints NFTs using: 55 in journey 4, fuel cells balance: 63612
Evil address mints NFTs using: 48870.0 in journey 4
Total volume in Pool at end of Phase 1: 2190613.6448038192
3 Lottery conducted and 421.8701927282475 payouts distributed to total 3198 winners.
Evil Address lottery winning: 318.29659408471406
Total lottery winnings for public: 103.57359864354633
Total lottery winnings sold by public: 93.2162387791917

Simulating Journey 5
Public mints NFTs using: 20 in journey 5, fuel cells balance: 78702
Evil address mints NFTs using: 43983.0 in journey 5
Total volume in Pool at end of Phase 1: 2801575.2547139744
3 Lottery conducted and 497.1642245462136 payouts distributed to total 2778 winners.
Evil Address lottery winning: 387.25426870315084
Total lottery winnings for public: 109.90995584306104
Total lottery winnings sold by public: 98.91896025875494

Simulating Journey 6
Public mints NFTs using: 9 in journey 6, fuel cells balance: 90293
Evil address mints NFTs using: 39585.0 in journey 6
Total volume in Pool at end of Phase 1: 3431909.215303904
3 Lottery conducted and 563.4233845532971 payouts distributed to total 2451 winners.
Evil Address lottery winning: 449.53679029842715
Total lottery winnings for public: 113.88659425487216
Total lottery winnings sold by public: 102.49793482938495

Simulating Journey 7
Public mints NFTs using: 28 in journey 7, fuel cells balance: 99752
Evil address mints NFTs using: 35626.0 in journey 7
Total volume in Pool at end of Phase 1: 4072979.141112509
3 Lottery conducted and 622.452450367444 payouts distributed to total 2187 winners.
Evil Address lottery winning: 504.865900856519
Total lottery winnings for public: 117.58654951091734
Total lottery winnings sold by public: 105.82789455982561

Simulating Journey 8
Public mints NFTs using: 7 in journey 8, fuel cells balance: 107876
Evil address mints NFTs using: 32064.0 in journey 8
Total volume in Pool at end of Phase 1: 4688402.674042588
3 Lottery conducted and 674.2479000546065 payouts distributed to total 1923 winners.
Evil Address lottery winning: 567.1075495444952
Total lottery winnings for public: 107.14035051012645
Total lottery winnings sold by public: 96.42631545911381

Simulating Journey 9
Public mints NFTs using: 6 in journey 9, fuel cells balance: 114323
Evil address mints NFTs using: 28857.0 in journey 9
Total volume in Pool at end of Phase 1: 5312013.6064215535
3 Lottery conducted and 720.4775162040075 payouts distributed to total 1719 winners.
Evil Address lottery winning: 618.0910329738253
Total lottery winnings for public: 102.38648323018857
Total lottery winnings sold by public: 92.14783490716972

Simulating Journey 10
Public mints NFTs using: 2 in journey 10, fuel cells balance: 119864
Evil address mints NFTs using: 25972.0 in journey 10
Total volume in Pool at end of Phase 1: 5937389.8101859465
3 Lottery conducted and 761.7122740557315 payouts distributed to total 1536 winners.
Evil Address lottery winning: 631.0055082788696
Total lottery winnings for public: 130.70676577686265
Total lottery winnings sold by public: 117.6360891991764

Simulating Journey 11
Public mints NFTs using: 2 in journey 11, fuel cells balance: 124628
Evil address mints NFTs using: 23374.0 in journey 11
Total volume in Pool at end of Phase 1: 6565651.479225193
3 Lottery conducted and 798.3768733551619 payouts distributed to total 1377 winners.
Evil Address lottery winning: 692.2745002077394
Total lottery winnings for public: 106.10237314741761
Total lottery winnings sold by public: 95.49213583267586

Simulating Journey 12
Public mints NFTs using: 0 in journey 12, fuel cells balance: 128792
Evil address mints NFTs using: 21037.0 in journey 12
Total volume in Pool at end of Phase 1: 7199515.825956094
3 Lottery conducted and 831.2080737188694 payouts distributed to total 1230 winners.
Evil Address lottery winning: 706.0924333542241
Total lottery winnings for public: 125.11564036465249
Total lottery winnings sold by public: 112.60407632818725

Simulating Journey 13
Public mints NFTs using: 1 in journey 13, fuel cells balance: 132381
Evil address mints NFTs using: 18933.0 in journey 13
Total volume in Pool at end of Phase 1: 7823287.770282013
3 Lottery conducted and 860.3126583254075 payouts distributed to total 1098 winners.
Evil Address lottery winning: 729.3517150205965
Total lottery winnings for public: 130.9609433048044
Total lottery winnings sold by public: 117.86484897432396

Simulating Journey 14
Public mints NFTs using: 6 in journey 14, fuel cells balance: 135452
Evil address mints NFTs using: 17040.0 in journey 14
Total volume in Pool at end of Phase 1: 8452504.948955614
3 Lottery conducted and 886.4479873975201 payouts distributed to total 993 winners.
Evil Address lottery winning: 770.1423386410055
Total lottery winnings for public: 116.30564875651554
Total lottery winnings sold by public: 104.67508388086398

Simulating Journey 15
Public mints NFTs using: 7 in journey 15, fuel cells balance: 138275
Evil address mints NFTs using: 15336.0 in journey 15
Total volume in Pool at end of Phase 1: 9082026.759713555
3 Lottery conducted and 910.0367540273722 payouts distributed to total 894 winners.
Evil Address lottery winning: 790.9379842049984
Total lottery winnings for public: 119.09876982237425
Total lottery winnings sold by public: 107.18889284013683

Simulating Journey 16
Public mints NFTs using: 0 in journey 16, fuel cells balance: 140866
Evil address mints NFTs using: 13802.0 in journey 16
Total volume in Pool at end of Phase 1: 9719855.906450642
3 Lottery conducted and 931.1005219002138 payouts distributed to total 804 winners.
Evil Address lottery winning: 809.0052509047749
Total lottery winnings for public: 122.09527099544373
Total lottery winnings sold by public: 109.88574389589935

Simulating Journey 17
Public mints NFTs using: 7 in journey 17, fuel cells balance: 143177
Evil address mints NFTs using: 12422.0 in journey 17
Total volume in Pool at end of Phase 1: 10354604.405719223
3 Lottery conducted and 949.9148964555635 payouts distributed to total 723 winners.
Evil Address lottery winning: 813.6496890209258
Total lottery winnings for public: 136.26520743464536
Total lottery winnings sold by public: 122.63868669118082

Simulating Journey 18
Public mints NFTs using: 7 in journey 18, fuel cells balance: 145235
Evil address mints NFTs using: 11180.0 in journey 18
Total volume in Pool at end of Phase 1: 10986496.083216928
3 Lottery conducted and 966.6347183337928 payouts distributed to total 651 winners.
Evil Address lottery winning: 850.1803710954314
Total lottery winnings for public: 116.4543472383699
Total lottery winnings sold by public: 104.80891251453292

Simulating Journey 19
Public mints NFTs using: 2 in journey 19, fuel cells balance: 147071
Evil address mints NFTs using: 10062.0 in journey 19
Total volume in Pool at end of Phase 1: 11624076.175803792
3 Lottery conducted and 981.8048161871641 payouts distributed to total 588 winners.
Evil Address lottery winning: 830.8129676335983
Total lottery winnings for public: 150.99184855356526
Total lottery winnings sold by public: 135.89266369820874

Simulating Journey 20
Public mints NFTs using: 2 in journey 20, fuel cells balance: 148804
Evil address mints NFTs using: 9055.0 in journey 20
Total volume in Pool at end of Phase 1: 12267863.636429626
3 Lottery conducted and 995.1906878315675 payouts distributed to total 531 winners.
Evil Address lottery winning: 867.4785656643211
Total lottery winnings for public: 127.71212216724727
Total lottery winnings sold by public: 114.94090995052255

Simulating Journey 21
Public mints NFTs using: 2 in journey 21, fuel cells balance: 150410
Evil address mints NFTs using: 8150.0 in journey 21
Total volume in Pool at end of Phase 1: 12904372.373817116
3 Lottery conducted and 1007.2859254731237 payouts distributed to total 480 winners.
Evil Address lottery winning: 858.8911239525338
Total lottery winnings for public: 148.39480152059423
Total lottery winnings sold by public: 133.5553213685348

Simulating Journey 22
Public mints NFTs using: 2 in journey 22, fuel cells balance: 151867
Evil address mints NFTs using: 7335.0 in journey 22
Total volume in Pool at end of Phase 1: 13540239.64971921
3 Lottery conducted and 1017.9043801682926 payouts distributed to total 429 winners.
Evil Address lottery winning: 863.3374812815961
Total lottery winnings for public: 154.5668988866938
Total lottery winnings sold by public: 139.1102089980244

Simulating Journey 23
Public mints NFTs using: 2 in journey 23, fuel cells balance: 153162
Evil address mints NFTs using: 6601.0 in journey 23
Total volume in Pool at end of Phase 1: 14180616.6447528
3 Lottery conducted and 1027.3848895612655 payouts distributed to total 390 winners.
Evil Address lottery winning: 798.1990295822125
Total lottery winnings for public: 229.18585997905126
Total lottery winnings sold by public: 206.26727398114613

Simulating Journey 24
Public mints NFTs using: 6 in journey 24, fuel cells balance: 154395
Evil address mints NFTs using: 5941.0 in journey 24
Total volume in Pool at end of Phase 1: 14811028.890169244
3 Lottery conducted and 1035.2597050086183 payouts distributed to total 351 winners.
Evil Address lottery winning: 858.2922340669766
Total lottery winnings for public: 176.96747094164417
Total lottery winnings sold by public: 159.27072384747976

Simulating Journey 25
Public mints NFTs using: 0 in journey 25, fuel cells balance: 155468
Evil address mints NFTs using: 5347.0 in journey 25
Total volume in Pool at end of Phase 1: 15449044.748415224
3 Lottery conducted and 1042.5406981504316 payouts distributed to total 315 winners.
Evil Address lottery winning: 892.187889981794
Total lottery winnings for public: 150.3528081686338
Total lottery winnings sold by public: 135.31752735177042

Simulating Journey 26
Public mints NFTs using: 4 in journey 26, fuel cells balance: 156459
Evil address mints NFTs using: 4812.0 in journey 26
Total volume in Pool at end of Phase 1: 16083971.477742236
3 Lottery conducted and 1049.2222731915083 payouts distributed to total 288 winners.
Evil Address lottery winning: 908.7014330319339
Total lottery winnings for public: 140.52084015957703
Total lottery winnings sold by public: 126.46875614361933

Simulating Journey 27
Public mints NFTs using: 5 in journey 27, fuel cells balance: 157416
Evil address mints NFTs using: 4331.0 in journey 27
Total volume in Pool at end of Phase 1: 16722457.403890578
3 Lottery conducted and 1055.2533766561176 payouts distributed to total 261 winners.
Evil Address lottery winning: 911.4339509377925
Total lottery winnings for public: 143.81942571832153
Total lottery winnings sold by public: 129.43748314648937

Simulating Journey 28
Public mints NFTs using: 2 in journey 28, fuel cells balance: 158328
Evil address mints NFTs using: 3898.0 in journey 28
Total volume in Pool at end of Phase 1: 17369204.872122288
3 Lottery conducted and 1060.6564716314247 payouts distributed to total 240 winners.
Evil Address lottery winning: 861.7833832005348
Total lottery winnings for public: 198.873088430892
Total lottery winnings sold by public: 178.98577958780282

Simulating Journey 29
Public mints NFTs using: 2 in journey 29, fuel cells balance: 159234
Evil address mints NFTs using: 3508.0 in journey 29
Total volume in Pool at end of Phase 1: 18004778.578933064
3 Lottery conducted and 1065.0662809399128 payouts distributed to total 216 winners.
Evil Address lottery winning: 896.0081411081785
Total lottery winnings for public: 169.0581398317323
Total lottery winnings sold by public: 152.15232584855906

Simulating Journey 30
Public mints NFTs using: 4 in journey 30, fuel cells balance: 160074
Evil address mints NFTs using: 3157.0 in journey 30
Total volume in Pool at end of Phase 1: 18637289.03442287
3 Lottery conducted and 1069.1338845470098 payouts distributed to total 195 winners.
Evil Address lottery winning: 883.5040452520318
Total lottery winnings for public: 185.6298392949754
Total lottery winnings sold by public: 167.06685536547786

Simulating Journey 31
Public mints NFTs using: 1 in journey 31, fuel cells balance: 160866
Evil address mints NFTs using: 2841.0 in journey 31
Total volume in Pool at end of Phase 1: 19278966.598335568
3 Lottery conducted and 1072.6103195787941 payouts distributed to total 180 winners.
Evil Address lottery winning: 822.3345783437409
Total lottery winnings for public: 250.27574123505215
Total lottery winnings sold by public: 225.24816711154693

Simulating Journey 32
Public mints NFTs using: 2 in journey 32, fuel cells balance: 161627
Evil address mints NFTs using: 2557.0 in journey 32
Total volume in Pool at end of Phase 1: 19919503.5785367
3 Lottery conducted and 1075.2231570888864 payouts distributed to total 162 winners.
Evil Address lottery winning: 782.2390693106981
Total lottery winnings for public: 292.9840877781887
Total lottery winnings sold by public: 263.6856790003699

Simulating Journey 33
Public mints NFTs using: 4 in journey 33, fuel cells balance: 162356
Evil address mints NFTs using: 2301.0 in journey 33
Total volume in Pool at end of Phase 1: 20569077.07442823
3 Lottery conducted and 1077.129126843361 payouts distributed to total 147 winners.
Evil Address lottery winning: 863.5874923671247
Total lottery winnings for public: 213.5416344762349
Total lottery winnings sold by public: 192.1874710286114

Graphs¶

In [ ]:
# Generate Graphs

# Convert accumulated data to DataFrames
price_df = pd.DataFrame(prices)
volume_df = pd.DataFrame(volumes)
nfts_minted_df = pd.DataFrame(nfts_minted)
nfts_minted_per_journey_df = pd.DataFrame(nfts_minted_per_journey)
evil_address_balance_df = pd.DataFrame(evil_address_balances)
yields_df = pd.DataFrame(yields_per_journey)
yields_accumulated_df = pd.DataFrame(yields_per_journey_accumulated)
cumulative_yield_df = pd.DataFrame(cumulative_yield_per_journey_1)
yield_per_nft_df = pd.DataFrame(yield_per_nft_per_journey)
pool_dark_reserve_df = pd.DataFrame(pool_dark_reserves)
pool_dai_reserve_df = pd.DataFrame(pool_dai_reserves)
token_distribution_df = pd.DataFrame(token_distribution)
evil_address_balance_df.to_csv("./EvilAddressbalanceChange.csv")

Token Distribution¶

In [ ]:
# Plot Token distribution among the accounts across the journeys in a stacked area chart
fig = go.Figure()
fig.add_trace(go.Scatter(x=token_distribution_df['journey'] + token_distribution_df['phase'] / 3, y=token_distribution_df['magic_box_balance'], mode='lines', stackgroup='one', name='Magic Box Account', hoverinfo='x+y'))
fig.add_trace(go.Scatter(x=token_distribution_df['journey'] + token_distribution_df['phase'] / 3, y=token_distribution_df['pool_balance'], mode='lines', stackgroup='one', name='Pool', hoverinfo='x+y'))
fig.add_trace(go.Scatter(x=token_distribution_df['journey'] + token_distribution_df['phase'] / 3, y=token_distribution_df['treasury_balance'], mode='lines', stackgroup='one', name='Treasury Account', hoverinfo='x+y'))
fig.add_trace(go.Scatter(x=token_distribution_df['journey'] + token_distribution_df['phase'] / 3, y=token_distribution_df['jackpot_balance'], mode='lines', stackgroup='one', name='Jackpot Account', hoverinfo='x+y'))
fig.add_trace(go.Scatter(x=token_distribution_df['journey'] + token_distribution_df['phase'] / 3, y=token_distribution_df['evil_address_balance'], mode='lines', stackgroup='one', name='Evil Address Account', hoverinfo='x+y'))
fig.add_trace(go.Scatter(x=token_distribution_df['journey'] + token_distribution_df['phase'] / 3, y=token_distribution_df['public_balance'], mode='lines', stackgroup='one', name='Public Account', hoverinfo='x+y'))
fig.add_trace(go.Scatter(x=token_distribution_df['journey'] + token_distribution_df['phase'] / 3, y=token_distribution_df['team_balance'], mode='lines', stackgroup='one', name='Team Account', hoverinfo='x+y'))
fig.add_trace(go.Scatter(x=token_distribution_df['journey'] + token_distribution_df['phase'] / 3, y=token_distribution_df['yield_balance'], mode='lines', stackgroup='one', name='Yield', hoverinfo='x+y'))
fig.update_layout(title='Token Distribution Among Accounts Across Journeys and Their Phase', xaxis_title='Journey and Phase', yaxis_title='Token Balance')
fig.show()

Price of Dark Tokens over Journey¶

In [ ]:
# Plot Price of Dark token across journeys and their phase
fig = go.Figure()
fig.add_trace(go.Scatter(x=price_df['journey'] + price_df['phase'] / 3, y=price_df['price'], mode='lines+markers', name='Price of Dark Token'))
fig.update_layout(title='Price of Dark Token Across Journeys and Their Phase', xaxis_title='Journey and Phase', yaxis_title='Price of Dark Token')
fig.show()

Total Number of NFTs minted over Journeys¶

In [ ]:
# Plot Total number of NFTs minted over journey
fig = go.Figure()
fig.add_trace(go.Bar(x=nfts_minted_df['journey'], y=nfts_minted_df['nfts'], name='Total NFTs Minted'))
fig.update_layout(title='Total Number of NFTs Minted over journey', xaxis_title='Journey', yaxis_title='Total NFTs Minted')
fig.show()

Total Number of NFTs minted in each journey¶

In [ ]:
# Plot Number of NFTs minted in each journey
fig = go.Figure()
fig.add_trace(go.Bar(x=nfts_minted_per_journey_df['journey'], y=nfts_minted_per_journey_df['nftsMinted'], name='Total NFTs Minted'))
fig.update_layout(title='Total Number of NFTs Minted in Each Journey', xaxis_title='Journey', yaxis_title='Total NFTs Minted')
fig.show()

Cummulative yield per NFT minted in Journey 1 in DARK tokens¶

In [ ]:
# Plot Cumulative yield per journey for NFTs minted in journey 1
fig = go.Figure()
fig.add_trace(go.Scatter(x=cumulative_yield_df['journey'], y=cumulative_yield_df['total_yield'], mode='lines+markers', name='Cumulative Yield for NFTs Minted in Journey 1'))
fig.update_layout(title='Cumulative Yield for NFTs Minted in Journey 1', xaxis_title='Journey', yaxis_title='Cumulative Yield (DARK)')
fig.show()

Cummulative yield per NFT minted in Journey 1 in USD¶

In [ ]:
# Plot Cumulative yield per journey for NFTs minted in journey 1
# Filtering df1 where phase == 3
df1_phase3 = price_df[price_df['phase'] == 3]

# Merging df1_phase3 with df2 on 'journey'
merged_df = pd.merge(df1_phase3, cumulative_yield_df, on='journey')

# Creating the new DataFrame with the required calculation
result_df = pd.DataFrame({
    'journey': merged_df['journey'],
    'total_yield_usd': merged_df['price'] * merged_df['total_yield']
})

fig = go.Figure()
fig.add_trace(go.Scatter(x=result_df['journey'], y=result_df['total_yield_usd'], mode='lines+markers', name='Cumulative Yield for NFTs Minted in Journey 1 in USD'))
fig.update_layout(title='Cumulative Yield for NFTs Minted in Journey 1', xaxis_title='Journey', yaxis_title='Cumulative Yield (USD)')
fig.show()

Return on Investment¶

In [ ]:
# Plot Cumulative yield per journey for NFTs minted in journey 1
# Creating the new DataFrame with the required calculation
price_value = price_df[(price_df['journey'] == 0) & (price_df['phase'] == 1)]['price'].values[0]
roi_df = pd.DataFrame({
    'journey': result_df['journey'],
    'roi': result_df['total_yield_usd'] / price_value * 100
})

fig = go.Figure()
fig.add_trace(go.Scatter(x=roi_df['journey'], y=roi_df['roi'], mode='lines+markers', name='Return on Investment in Journey 1'))
fig.update_layout(title='Cumulative Yield for NFTs Minted in Journey 1', xaxis_title='Journey', yaxis_title='ROI (%)')
fig.show()

Cummulative yield given to NFTs till Journey 50¶

In [ ]:
# Plot Total yield generated by NFT minted in each journey
fig = go.Figure()
fig.add_trace(go.Bar(x=yields_accumulated_df['journey'], y=yields_accumulated_df['total_yield'], name='Total Yield Generated'))
fig.update_layout(title='Total Yield Generated by NFTs Minted in Each Journey', xaxis_title='Journey', yaxis_title='Total Yield')
fig.show()

Change of Balance of Evil Address over journeys¶

In [ ]:
# Plot Change of balance of Evil address across each journey and their phase
fig = go.Figure()
fig.add_trace(go.Scatter(x=evil_address_balance_df['journey'] + evil_address_balance_df['phase'] / 3, y=evil_address_balance_df['balance'], mode='lines+markers', name='Evil Address Balance'))
fig.update_layout(title='Change of Balance of Evil Address Across Each Journey and Their Phase', xaxis_title='Journey and Phase', yaxis_title='Balance of Evil Address')
fig.show()

Expected Liquidity Pool trades¶

In [ ]:
# Plot Cumulative volume of trades across phases and journey
fig = go.Figure()
fig.add_trace(go.Scatter(x=volume_df['journey'] + volume_df['phase'] / 3, y=volume_df['volume'], mode='lines+markers', name='Cumulative Volume'))
fig.update_layout(title='Cumulative Volume of Trades Across Phases and Journey', xaxis_title='Journey and Phase', yaxis_title='Cumulative Volume')
fig.show()

# Plot Change in Dark token reserves in the pool
fig = go.Figure()
fig.add_trace(go.Scatter(x=pool_dark_reserve_df['journey'] + pool_dark_reserve_df['phase'] / 3, y=pool_dark_reserve_df['dark_reserve'], mode='lines+markers', name='Dark Reserve in Pool'))
fig.update_layout(title='Change in Dark Token Reserves in the Pool Across Journeys and Their Phase', xaxis_title='Journey and Phase', yaxis_title='Dark Token Reserve')
fig.show()

# Plot Change in DAI token reserves in the pool
fig = go.Figure()
fig.add_trace(go.Scatter(x=pool_dai_reserve_df['journey'] + pool_dai_reserve_df['phase'] / 3, y=pool_dai_reserve_df['dai_reserve'], mode='lines+markers', name='DAI Reserve in Pool'))
fig.update_layout(title='Change in DAI Token Reserves in the Pool Across Journeys and Their Phase', xaxis_title='Journey and Phase', yaxis_title='DAI Token Reserve')
fig.show()